package com.heatup.apt.common.dao;

import com.heatup.apt.model.datacenter.DataCenterOrderDetailModel;
import com.heatup.apt.model.datacenter.DataCenterOrderIncomeAmtModel;
import com.heatup.apt.model.datacenter.DataCenterSortResultModel;
import com.heatup.apt.model.datacenter.DataCenterVIPDeatilModel;

import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Component;

import java.math.BigDecimal;
import java.util.List;

@Component
public interface DataCenterDaoMapper {



	// 按天/周/月时间统计订单总金额数据
	public BigDecimal queryOrderIncomeAmtBy(@Param("startDate") String startDate, @Param("endDate") String endDate,
			@Param("yearMonth") String yearMonth);
	
	// 按天/周/月时间统计订单金额按门店明细数据
	public List<DataCenterOrderIncomeAmtModel> queryOrderDetailIncomeAmtBy(@Param("startDate") String startDate, @Param("endDate") String endDate,
			@Param("yearMonth") String yearMonth);

	//按天/周/月统计订单总数量
	public Integer queryOrderCountBy(@Param("startDate") String startDate, @Param("endDate") String endDate,
			@Param("yearMonth") String yearMonth);
	
	
	public List<DataCenterOrderDetailModel> queryOrderCountDetailBy(@Param("startDate") String startDate, @Param("endDate") String endDate,
			@Param("yearMonth") String yearMonth);
	
	
	public Integer queryNweVipCountBy(@Param("startDate") String startDate, @Param("endDate") String endDate,
			@Param("yearMonth") String yearMonth);
	
	
	public List<DataCenterVIPDeatilModel> queryNweVipCountDetailBy(@Param("startDate") String startDate, @Param("endDate") String endDate,
			@Param("yearMonth") String yearMonth);
	
	
	public BigDecimal queryVIPOrderAmtBy(@Param("startDate") String startDate, @Param("endDate") String endDate,
			@Param("yearMonth") String yearMonth);
	
	
	/**
	 * 月会员复购率（续费率）
	 *  【会员续费率】
		1.统计周期：按月统计，下面统计口径以12月为例
		2.统计口径：
		1)分母：在12月这个自然月内，购买了一个月会员的用户数
		2)分子：分母对应的用户里，在12月1日至2月10日（共70天），有再次购买会员订单（不区分购买了几个月）的用户数
	 */
	public BigDecimal queryVipOrderRepeatChargeRate(@Param("startDate")String startDate, @Param("endDate")String endDate);
	
	/**
	 * 【付费渗透率】
		1.统计周期：默认统计周期为上线至今；用时间控件，支持用户选择要统计的时间周期；
		2.统计口径：
		1)分母：当前已注册了用户ID的用户总数
		2)分子：所有有过付费行为的用户总数（包括购买会员，购买课程）
	 * @return
	 */
	public BigDecimal queryPayInfiltrationRate(@Param("startDate")String startDate, @Param("endDate")String endDate);
	
	/**
	 * 【零售复购率】
		1.统计条件：
		1)周期：默认统计周期为上线至今；用时间控件，支持用户选择要统计的时间周期；
		2)用户身份：可勾选要查的是“全量”、“非会员”还是“会员”的零售复购率
		2.统计口径：
		1)分母：在所选定时间周期内，至少买过1笔零售订单的用户数
		2)分子：在所选定时间周期内，买过≥2笔零售订单的用户数
	 * @param startDate
	 * @param endDate
	 * @param userType 1:非会员 2：会员 3：全量
	 * @return
	 */
	public BigDecimal queryRetailRepeatChargeRate(@Param("startDate")String startDate, @Param("endDate")String endDate,@Param("userType")String userType);
	
	/**
	 * 【团课满课率】
	1.统计周期：默认统计周期为上线至今；用时间控件，支持用户选择要统计的时间周期
	2.统计口径：
	1)分母：在所选定时间周期内，所有状态为“已结束”的团课对应“上限人数”之和
	2)分子：在所选定时间周期内，所有状态为“已结束”的团课对应“已报人数+排队人数”之和
	 * @param startDate
	 * @param endDate
	 * @return
	 */
	
	
	public BigDecimal queryTeamFullClassRate(@Param("startDate")String startDate, @Param("endDate")String endDate);
	
	/**
	【团课满课率排名】
	*/
	public List<DataCenterSortResultModel> queryTeamFullClassRateSort(@Param("startDate")String startDate, @Param("endDate")String endDate);
	/**
	 * 【团课满课率明细】
	1.统计周期：默认统计周期为上线至今；用时间控件，支持用户选择要统计的时间周期
	2.统计口径：
	1)分母：在所选定时间周期内，所有状态为“已结束”的团课对应“上限人数”之和
	2)分子：在所选定时间周期内，所有状态为“已结束”的团课对应“已报人数+排队人数”之和
	 * @param startDate
	 * @param endDate
	 * @return
	 */
	
	public List<DataCenterSortResultModel> queryTeamFullClassRateDetail(@Param("startDate")String startDate, @Param("endDate")String endDate);
	/**
	 * 【周排课量】
		1.统计周期：每周统计；
		2.统计口径：上一自然周状态为“已结束”的团课数量
	 * @param startDate
	 * @param endDate
	 * @return
	 */
	public Integer queryWeekCourseCount(@Param("startDate")String startDate, @Param("endDate")String endDate);
	
	/**
	 * 周排课量明细
	 * @param startDate
	 * @param endDate
	 * @return
	 */
	public List<DataCenterSortResultModel> queryWeekCourseCountDetail(@Param("startDate")String startDate, @Param("endDate")String endDate);
	
	
	/**
	 * 【用户平均购买次数】
		1.统计周期：每周统计；每月统计；
		2.统计口径：
		1)分子：在统计周期内，状态为“已完成”的订单总笔数
		2)分母：在统计周期内，有订单状态为“已完成”的用户数
	 * @return
	 */
	public BigDecimal queryUserAvgChargeCount(@Param("startDate")String startDate, @Param("endDate")String endDate);
	
	
	/**
	 * 【课程重复购买率排名】
		1.统计周期：默认统计周期为上线至今；用时间控件，支持用户选择要统计的时间周期；
		2.统计口径：
		1)名词解释：该统计项的课程指“标准课程库的课程”，且仅针对团课
		2)分母：在所选定时间周期内，至少买过1笔该标准课程团课的用户数
		3)分子：在所选定时间周期内，买过≥2笔该标准课程团课的用户数
		4)补充说明：所统计的订单状态限定为“已完成”
		3.将统计到的标准课程及对应的百分比，按从高到低排序
	 * 
	 */
	public List<DataCenterSortResultModel> queryCourseSortList(@Param("startDate")String startDate, @Param("endDate")String endDate);
	
	/**
	 * 【教练重复购买率排名】
		1.统计周期：默认统计周期为上线至今；用时间控件，支持用户选择要统计的时间周期；
		2.统计口径：
		1)分母：在所选定时间周期内，买过1笔该教练团课的用户数
		2)分子：在所选定时间周期内，买过≥2笔该教练团课的用户数
		3)补充说明：所统计的订单状态限定为“已完成”
		3.将统计到的教练及对应的百分比，按从高到低排序
	 * @param startDate
	 * @param endDate
	 * @return
	 */
	public List<DataCenterSortResultModel> queryCoachSortList(@Param("startDate")String startDate, @Param("endDate")String endDate);
	
	/**
	 *	【会员约课转化率】
		1.统计周期：默认统计周期为上线至今；用时间控件，支持用户选择要统计的时间周期；
		2.统计口径：
		1)分母：统计周期内的会员总数
		2)分子：统计周期内有≥1笔的零售订单（指团课、私教、檬营、自助）状态为“已完成”的会员数
	 * @param startDate
	 * @param endDate
	 * @return
	 */
	public BigDecimal queryVipOrderConversionRate(@Param("startDate")String startDate, @Param("endDate")String endDate);
	
	/**
	 * 普通用户自助复购率
	 * @param startDate
	 * @param endDate
	 * @return
	 */
	public BigDecimal queryNoVipSlefRepeatChargeRate(@Param("startDate")String startDate, @Param("endDate")String endDate);
	
	/**
	 * 当期付费用户总数
	 * @param startDate
	 * @param endDate
	 * @return
	 */
	public Integer queryPayUserCount(@Param("startDate")String startDate, @Param("endDate")String endDate);
	
	/**
	 * 会员自助转化率
	 * @param startDate
	 * @param endDate
	 * @return
	 */
	public BigDecimal queryVipUserSelfOrderRate(@Param("startDate")String startDate, @Param("endDate")String endDate);
	
	/**
	 * 普通用户
	 * @param startDate
	 * @param endDate
	 * @return
	 */
	public BigDecimal queryNOVipUserSelfOrderRate(@Param("startDate")String startDate, @Param("endDate")String endDate);
	
	/**
	 * 每月会员收入汇总
	 * @param startDate
	 * @param endDate
	 * @return
	 */
	public BigDecimal queryVipAmtByPerMonth(@Param("startDate")String startDate, @Param("endDate")String endDate);
	
	/**
	 * 檬会员数量查询
	 * @return
	 */
	public Integer queryVipUserCount();
	
	/**
	 * 会员到期未续费数量
	 * @param startDate
	 * @param endDate
	 * @return
	 */
	public Integer queryVipExpiredCountBy(@Param("startDate")String startDate, @Param("endDate")String endDate);
	
	
}